package com.example.wordbook;

import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;
//数据访问对象。SQL查询到方法的映射
//dao层定义了增删改查方法,它是一个接口，里面主要是对数据的操作方法
//对于复杂查询，再注解中定义了sql语句：
@Dao
public interface WordDao {
    @Insert //增加
    void insertWords(Word... words);//传入多个参数，变长类型的参数
    @Update
    void updateWords(Word... words);
    @Delete
    void deleteWords(Word... words);

//LiveData是 lifecycle library 中，用于数据观察的类。
//它可以感知 Activity、Fragment或Service等组件的生命周期。简单来说，他主要有以下优点：
            //（1）它可以做到在组件处于激活状态的时候才会回调相应的方法，从而刷新相应的 UI。
           // （2）不用担心发生内存泄漏
          //（3）当 config 导致 activity 重新创建的时候，不需要手动取处理数据的储存和恢复。它已经帮我们封装好了。


    //改变deleteAllWords()方法的返回值
    @Query("delete from word")
    void deleteAllWords();
    //改变getAllWords()方法的返回值
    @Query("select * from word order by id desc")
    LiveData<List<Word>> getAllWordsLive();
    //模糊查询并按倒叙排序，按照英文查询
    @Query("select * from word where english_word like :patten order by id desc ")
    LiveData<List<Word>> findWordsWithPattern(String patten);
}
